﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

using transportsystem.DTO;
using transportsystem.BUS;

namespace transportsystem
{
    public partial class frmXe : Form
    {
        DataTable dt;
        bool hideControls = true;
        int iIndex = 0;
        bool addNew = false;

        void HideAddNew(bool value)
        {
            if (value == true)
                pnlAddNew.Visible = false;
            else
                pnlAddNew.Visible = true;
        }

        public void SetDataGridTitle()
        {
            string[] a = new string[6] { "Mã xe", "Biển số", "Số lượng ghế", "Trạng thái", "Mã loại xe", "Trọng lượng tải hàng" };

            for (int i = 0; i < a.Count(); i++)
                dgv.Columns[i].HeaderText = a[i];
        }

        public void SetValueToControls()
        {
            if (dt.Rows.Count > 0)
            {
                txtMaXe.Text = dt.Rows[iIndex]["maxe"].ToString();
                txtBienSo.Text = dt.Rows[iIndex]["bangsoxe"].ToString().Trim();
                nudSoLuongGhe.Value = decimal.Parse(dt.Rows[iIndex]["soluongghe"].ToString());
                int z = int.Parse(dt.Rows[iIndex]["trangthai"].ToString());
                int ml = int.Parse(dt.Rows[iIndex]["maloaixe"].ToString());
                foreach (DataRowView Row in cmbLoaiXe.Items)
                    if (Row["maloaixe"].ToString() == ml.ToString()) cmbLoaiXe.SelectedItem = Row;
                if (z == 0)
                    chkTrangThai.Checked = false;
                else
                    chkTrangThai.Checked = true;

                nudTrongLuongTaiHang.Value = int.Parse(dt.Rows[iIndex]["trongluongtaihang"].ToString());
                lblCount.Text = "Hiện có " + dgv.Rows.Count.ToString() + " xe.";
                lblNote.Text = "Trạng thái: 0 - đã sử dụng, 1 - chưa sử dụng.";
            }
        }

        public void AddNewPrepair()
        {
            txtMaXe.Text = "";
            txtBienSo.Text = "";
            nudSoLuongGhe.Value = 0;
            chkTrangThai.Checked = false;
            cmbLoaiXe.SelectedItem = 0;
            nudTrongLuongTaiHang.Value = 0;

            addNew = true;
            txtBienSo.Focus();
        }

        public bool CheckControls()
        {
            bool ok = true;
            if (txtBienSo.Text == "")
            {
                MessageBox.Show("Chưa điền biển số cho xe!");
                ok = false;
            }
            return ok;
        }

        public void WriteData()
        {
            if (CheckControls() == true)
            {
                Xe x = new Xe();

                //Khởi tạo và gán dữ liệu
                if (addNew == false)
                    x.Maxe = int.Parse(txtMaXe.Text);
                x.Bangsoxe = txtBienSo.Text.Trim();
                if (chkTrangThai.Checked == true)
                    x.Trangthai = 1;
                else
                    x.Trangthai = 0;

                x.Maloaixe = int.Parse(cmbLoaiXe.SelectedValue.ToString().Trim());
                x.Trongluonghangtai = int.Parse(nudTrongLuongTaiHang.Value.ToString());
                int soLuongThem = 0;
                bool i;
                try
                {
                    soLuongThem = int.Parse(txtSoLuongThem.Text);
                }
                catch
                {
                    MessageBox.Show("Phải nhập vào số lượng thêm một số!");
                    txtSoLuongThem.Focus();
                }
                if (txtSoLuongThem.Text != "" && soLuongThem > 0)
                {
                    x.Soluongghe = soLuongThem;
                    if (rdbDirtyRead.Checked)
                    {
                        if (chkTranhChap.Checked)
                            i = XeBUS.updateXe(x, 1, 0, 1);
                        else
                            i = XeBUS.updateXe(x, 1, 0, 0);
                    }
                    else
                    {
                        if (chkTranhChap.Checked)
                            i = XeBUS.updateXe(x, 1, 1, 1);
                        else
                            i = XeBUS.updateXe(x, 1, 1, 0);
                    }
                }
                else
                {
                    x.Soluongghe = int.Parse(nudSoLuongGhe.Value.ToString());
                    if (rdbDirtyRead.Checked)
                    {
                        if (chkTranhChap.Checked)
                            i = XeBUS.updateXe(x, 0, 0, 1);
                        else
                            i = XeBUS.updateXe(x, 0, 0, 0);
                    }
                    else
                    {
                        if (chkTranhChap.Checked)
                            i = XeBUS.updateXe(x, 0, 1, 1);
                        else
                            i = XeBUS.updateXe(x, 0, 1, 0);
                    }
                }
                string msg = "";
                if (i == true)
                {
                    if (addNew == true)
                        msg = "Thêm thành công";
                    else
                        msg = "Sửa thành công";
                }
                else
                {
                    if (addNew == true)
                        msg = "Thêm thất bại";
                    else
                        msg = "Sửa thất bại";
                }
                MessageBox.Show(msg);

                LoadData();
                addNew = false;
            }
        }

        public void LoadData()
        {
            HideAddNew(hideControls);
            dt = XeBUS.getXeList();
            if (dt != null && dt.Rows.Count > 0)
            {
                dgv.DataSource = dt;
                iIndex = 0;
                SetDataGridTitle();

                DataTable lxe = LoaiXeBUS.getLoaiXeList();
                if (lxe != null && lxe.Rows.Count > 0)
                    cmbLoaiXe.DataSource = lxe;
                cmbLoaiXe.DisplayMember = "tenloaixe";
                cmbLoaiXe.ValueMember = "maloaixe";
                SetValueToControls();
            }
        }

        public frmXe()
        {
            InitializeComponent();
        }

        private void frmXe_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        private void chkHideControls_CheckedChanged(object sender, EventArgs e)
        {
            hideControls = !hideControls;
            HideAddNew(hideControls);
        }

        private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            addNew = false;
            iIndex = e.RowIndex;
            SetValueToControls();
        }

        private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            addNew = false;
            iIndex = e.RowIndex;
            SetValueToControls();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            chkHideControls.Checked = true;
            hideControls = !chkHideControls.Checked;
            HideAddNew(hideControls);
            AddNewPrepair();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            WriteData();
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            if (addNew == false)
            {
                Xe x = new Xe();
                x.Maxe = int.Parse(txtMaXe.Text.Trim());
                bool i = XeBUS.deleteXe(x);
                string msg = "";
                if (i == true)
                    msg = "Xóa thành công";
                else
                    msg = "Xóa thất bại";
                MessageBox.Show(msg);
                LoadData();
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            string bienSo = txtTimKiem.Text;
            DataTable dt;

            if (chkTranhChap.Checked)
                dt = XeBUS.getXeListByBienSo(bienSo, 1);
            else
                dt = XeBUS.getXeListByBienSo(bienSo, 0);

            if (dt != null && dt.Rows.Count > 0)
            {
                dgv.DataSource = dt;
                iIndex = 0;
                SetDataGridTitle();

                DataTable lxe = LoaiXeBUS.getLoaiXeList();
                if (lxe != null && lxe.Rows.Count > 0)
                    cmbLoaiXe.DataSource = lxe;
                cmbLoaiXe.DisplayMember = "tenloaixe";
                cmbLoaiXe.ValueMember = "maloaixe";
                SetValueToControls();
            }
            else
            {
                MessageBox.Show("Không tìm thấy xe có biển số chứa " + bienSo);
                LoadData();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int soghe = int.Parse(txtSoLuongThem.Text);
            int id = int.Parse(txtMaXe.Text);
            SqlParameter[] sp = new SqlParameter[2];
            sp[0] = new SqlParameter("@maxe", id);
            sp[1] = new SqlParameter("@soghetang", soghe);
            bool i = XeBUS.updateGhe(sp);
            string msg = "";
            if (i == true)
            {
                msg = "Cập nhật thành công";
            }
            else
                msg = "Cập nhật thất bại";
            MessageBox.Show(msg);
            frmXe_Load(sender, e);
        }
    }
}
